package com.sromku.simple.fb; import java.util.ArrayList; import java.util.List; import com.facebook.SessionDefaultAudience; import com.facebook.SessionLoginBehavior; public class SimpleFacebookConfiguration { private String mAppId; private String mNamespace; private List<String> mReadPermissions = null; private List<String> mPublishPermissions = null; private SessionDefaultAudience mDefaultAudience = null; private SessionLoginBehavior mLoginBehavior = null; private boolean mHasPublishPermissions = false; boolean mAllAtOnce = false; private SimpleFacebookConfiguration(Builder builder) { this.mAppId = builder.mAppId; this.mNamespace = builder.mNamespace; this.mReadPermissions = builder.mReadPermissions; this.mPublishPermissions = builder.mPublishPermissions; this.mDefaultAudience = builder.mDefaultAudience; this.mLoginBehavior = builder.mLoginBehavior; this.mAllAtOnce = builder.mAllAtOnce; if (this.mPublishPermissions.size() > 0) { this.mHasPublishPermissions = true; } } /** * Get facebook application id * * @return */ public String getAppId() { return mAppId; } /** * Get application namespace * * @return */ public String getNamespace() { return mNamespace; } /** * Get read permissions * * @return */ public List<String> getReadPermissions() { return mReadPermissions; } /** * Get publish permissions * * @return */ public List<String> getPublishPermissions() { return mPublishPermissions; } /** * Return <code>True</code> if 'PUBLISH' permissions are defined * * @return */ boolean hasPublishPermissions() { return mHasPublishPermissions; } /** * Get session login behavior * * @return */ SessionLoginBehavior getSessionLoginBehavior() { return mLoginBehavior; } /** * Get session default audience * * @return */ SessionDefaultAudience getSessionDefaultAudience() { return mDefaultAudience; } /** * Return <code>True</code> if all permissions - read and publish should be * asked one after another in the same time after logging in. */ boolean isAllPermissionsAtOnce() { return mAllAtOnce; } /** * Add new permissions in a runtime * * @param permissions */ void addNewPermissions(Permission[] permissions) { for (Permission permission : permissions) { switch (permission.getType()) { case READ: if (!mReadPermissions.contains(permission.getValue())) { mReadPermissions.add(permission.getValue()); } break; case PUBLISH: if (!mPublishPermissions.contains(permission.getValue())) { mPublishPermissions.add(permission.getValue()); } break; default: break; } } if (this.mPublishPermissions.size() > 0) { this.mHasPublishPermissions = true; } } public static class Builder { private String mAppId = null; private String mNamespace = null; private List<String> mReadPermissions = new ArrayList<String>(); private List<String> mPublishPermissions = new ArrayList<String>(); private SessionDefaultAudience mDefaultAudience = SessionDefaultAudience.FRIENDS; private SessionLoginBehavior mLoginBehavior = SessionLoginBehavior.SSO_WITH_FALLBACK; private boolean mAllAtOnce = false; public Builder() { } /** * Set facebook App Id. <br> * The application id is located in the dashboard of the app in admin * panel of facebook * * @param appId */ public Builder setAppId(String appId) { mAppId = appId; return this; } /** * Set application namespace * * @param namespace * @return */ public Builder setNamespace(String namespace) { mNamespace = namespace; return this; } /** * Set the array of permissions you want to use in your application * * @param permissions */ public Builder setPermissions(Permission[] permissions) { for (Permission permission : permissions) { switch (permission.getType()) { case READ: mReadPermissions.add(permission.getValue()); break; case PUBLISH: mPublishPermissions.add(permission.getValue()); break; default: break; } } return this; } /** * @param defaultAudience * The defaultAudience to set. * @see SessionDefaultAudience */ public Builder setDefaultAudience(SessionDefaultAudience defaultAudience) { mDefaultAudience = defaultAudience; return this; } /** * @param loginBehavior * The loginBehavior to set. * @see SessionLoginBehavior */ public Builder setLoginBehavior(SessionLoginBehavior loginBehavior) { mLoginBehavior = loginBehavior; return this; } /** * If your app has both: read and publish permissions, then this * configuration can be very useful. When you first time login the popup * with read permissions that the user should accept is appeared. After * this you can decide, if you want the dialog of publish permissions to * appear or not. <br> * <br> * <b>Note:</b>Facebook requests not to ask the user for read and then * publish permissions at once, thus the default value will be * <code>false</code> for this flag. * * @param allAtOnce * @return {@link Builder} */ public Builder setAskForAllPermissionsAtOnce(boolean allAtOnce) { mAllAtOnce = allAtOnce; return this; } /** * Build the configuration for storage tool. * * @return */ public SimpleFacebookConfiguration build() { return new SimpleFacebookConfiguration(this); } } public String toString() { StringBuilder stringBuilder = new StringBuilder(); stringBuilder.append("[ ").append("mAppId:").append(mAppId).append(", ").append("mNamespace:").append(mNamespace).append(", ").append("mDefaultAudience:").append(mDefaultAudience.name()) .append(", ").append("mLoginBehavior:").append(mLoginBehavior.name()).append(", ").append("mReadPermissions:").append(mReadPermissions.toString()).append(", ") .append("mPublishPermissions:").append(mPublishPermissions.toString()).append(" ]"); return stringBuilder.toString(); } }